package a2025_02_23;

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    int[] dr=new int[]{0,0,1,-1};//用来统计上下左右的行坐标的变化
    int[] dc=new int[]{1,-1,0,0};//同样的用来统计上下左右的列坐标的变化
    public int[][] floodFill(int[][] image, int sr, int sc, int color) {
        int prev=image[sr][sc];//记住要找的元素
        if(prev==color) return image;//返回边界条件

        Queue<int[]> queue=new LinkedList<>();//用一个队列来放宽搜的每一层的元素.能够保证按每一层的先后顺序出队
        queue.add(new int[]{sr,sc});
        image[sr][sc]=color;//可以在入队的时候改变像素的颜色成目标颜色
                            //也可以在出队的时候改变像素的颜色成目标颜色

        int m=image.length;//表格行数
        int n=image[0].length;//表格列数
        while(!queue.isEmpty()){//不为空表示上一层遍历是有符合条件的颜色的
            int[] temp=queue.poll(); //出队颜色
            int r=temp[0];//行坐标
            int c=temp[1];//列坐标
            for(int i=0;i<4;i++){
                int r1=r+dr[i];
                int c1=c+dc[i];
                if(r1>=0&&r1<m&&c1>=0&&c1<n&&image[r1][c1]==prev){//要符合 坐标不超出表格，颜色要符合原先要求的颜色的条件
                    queue.offer(new int[]{r1,c1});
                    image[r1][c1]=color;
                }
            }
        }
        return image;
    }
}
